package com.qf.service.serviceImpi;

import com.qf.dao.CartDao;
import com.qf.dao.GoodsDao;
import com.qf.dao.daoimpl.CartDaoImpl;
import com.qf.dao.daoimpl.GoodsDaoImpl;
import com.qf.pojo.Cart;
import com.qf.pojo.Goods;
import com.qf.service.CartService;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class CartServiceImpl implements CartService {

    @Override
    public boolean createCart(Integer uid, Integer pid) {
        //1. 根据用户id和商品id, 到数据库中查询是否已经有这个商品的数据
        CartDao cartDao = new CartDaoImpl();
        Cart cart = cartDao.findCartByUidAndPid(uid, pid);

        //根据商品id, 查询商品对象
        GoodsDao goodsDao = new GoodsDaoImpl();
        Goods goods = goodsDao.findById(pid);


        if(cart != null) {
            //2. 判断如果能够查询到这个购物项数据, 进行购买数量的添加
            //购买件数+1
            cart.setNum(cart.getNum() + 1);
            //将商品对象放入购物车中
            cart.setGoods(goods);
            //从新计算总价钱 = 商品的购买数量 * 商品单价
            cart.setMoney(cart.getNum() * goods.getPrice());

            //调用dao, 将最新的购物车数据更新到表中
            cartDao.updateCart(cart);

        } else {
            //3. 判断如果查不到这个购物项的数据, 那么作为新的购物项添加到数据库中
            //因为cart购物车为null, 所以需要new创建购物车对象
            cart = new Cart();

            //用户id
            cart.setUid(uid);
            //商品id
            cart.setPid(pid);
            //购买数量
            cart.setNum(1);
            //将商品对象放入购物车中
            cart.setGoods(goods);
            //总价 = 购买数量 * 商品单价
            cart.setMoney(cart.getNum() * goods.getPrice());

            cartDao.insertCart(cart);
        }

        return true;
    }

    @Override
    public List<Cart> findCartListByUid(Integer uid) {
        //根据用户id, 查询购物项集合
        CartDao cartDao = new CartDaoImpl();
        List<Cart> cartList = cartDao.findCartListByUid(uid);

        //查询所有商品数据
        GoodsDao goodsDao = new GoodsDaoImpl();
        List<Goods> goodList = goodsDao.findGoodsAll();

        Map<String, Goods> goodsMap = new HashMap<String, Goods>();
        if (goodList != null) {
            for (Goods goods : goodList) {
                //以商品id作为key, 以商品对象作为value
                goodsMap.put(String.valueOf(goods.getId()), goods);
            }
        }

        if (cartList != null) {
            for (Cart cart : cartList) {
                Goods goods = goodsMap.get(String.valueOf(cart.getPid()));
                if (goods != null) {
                    //如果商品对象不为空, 那么放入购物车对象中
                    cart.setGoods(goods);
                }
            }
        }

        return cartList;
    }

    @Override
    public void updateCart(Integer cid, Integer num) {
        //1. 根据cid, 到数据库查询这个购物项的数据
        CartDao cartDao = new CartDaoImpl();
        Cart cart = cartDao.findById(cid);

        //2. 根据查询到的购物项的, 商品id, 到商品表中查询对应的商品数据
        GoodsDao goodsDao = new GoodsDaoImpl();
        Goods goods = goodsDao.findById(cart.getPid());


        //3. 从新计算总价 = 商品单价 * 商品购买数量
        cart.setNum(num);
        cart.setGoods(goods);
        cart.setMoney(goods.getPrice() * num);
        cartDao.updateCart(cart);
    }

    @Override
    public void deleteById(Integer id) {
        CartDao cartDao = new CartDaoImpl();
        cartDao.deleteById(id);
    }

}
